#没有发送代码及误差，参考灰度识别两边黑线返回中间坐标搞
# 导入sensor, image, time, math四个模块
import sensor, image, time, math

# 定义颜色跟踪的阈值，(4, 53, -29, 17, -25, 22)表示在LAB颜色空间中，L值在4到53之间，A值在-29到17之间，B值在-25到22之间的像素会被认为是目标颜色
thresholds = (4, 53, -29, 17, -25, 22)

# 重置传感器
sensor.reset()
# 设置传感器的像素格式为RGB565
sensor.set_pixformat(sensor.RGB565)
# 设置传感器的分辨率为QVGA (320x240)
sensor.set_framesize(sensor.QVGA)
# 跳过前2000帧，等待传感器稳定
sensor.skip_frames(time = 2000)
# 关闭自动增益，否则会影响颜色跟踪
sensor.set_auto_gain(False)
# 关闭自动白平衡，否则会影响颜色跟踪
sensor.set_auto_whitebal(False)
# 创建一个时钟对象，用于计算帧率
clock = time.clock()

# 初始化三个变量，分别表示左边连通域的中心x坐标，右边连通域的中心x坐标，和两个连通域中心的平均x坐标
x1 = 0
x2 = 0
mid_zb = 0
# 定义两个矩形区域，分别用于在图像上划分左右两个感兴趣区域（ROI）
r1 =(0,140,100,25) # 左边的矩形区域，(x,y,w,h)表示左上角坐标为(0,140)，宽度为100，高度为25
r2 =(220,140,100,25) # 右边的矩形区域，(x,y,w,h)表示左上角坐标为(220,140)，宽度为100，高度为25

# 主循环
while(True):
    # 更新时钟
    clock.tick()
    # 拍摄一张图像并存储在img变量中
    img = sensor.snapshot()
    # 在图像上画出两个矩形区域，颜色为白色（默认）
    img.draw_rectangle(r1)
    img.draw_rectangle(r2)
    # 在左边的矩形区域内寻找连通域，要求像素阈值为200，面积阈值为200，并且合并重叠的连通域（merge=True）
    for blob in img.find_blobs([thresholds], roi = r1,pixels_threshold=200, area_threshold=200, merge=True):
        # 在图像上画出找到的连通域的外接矩形，颜色为白色（默认）
        img.draw_rectangle(blob.rect())
        # 更新左边连通域的中心x坐标
        x1 = blob.cx()
        # 在图像上画出找到的连通域的中心点，颜色为白色（默认）
        img.draw_cross(blob.cx(), blob.cy())
        # 打印左边连通域的中心x坐标
        #print(x1)
    # 在右边的矩形区域内寻找连通域，要求像素阈值为200，面积阈值为200，并且合并重叠的连通域（merge=True）
    for blob in img.find_blobs([thresholds], roi = r2,pixels_threshold=200, area_threshold=200, merge=True):
        # 在图像上画出找到的连通域的外接矩形，颜色为白色（默认）
        img.draw_rectangle(blob.rect())
        # 更新右边连通域的中心x坐标
        x2 = blob.cx()
        # 在图像上画出找到的连通域的中心点，颜色为白色（默认）
        img.draw_cross(blob.cx(), blob.cy())
        # 打印右边连通域的中心x坐标
        #print(x2)
    # 计算两个连通域中心的平均x坐标
    mid_zb = (x1+x2)/2
    # 打印平均x坐标
    print(mid_zb)
    # 打印帧率
    #print(clock.fps())
